/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package aqu.controlador.CuentasPorPagar;

import aqu.controlador.Contabilidad.*;
import aqu.bean.generico.BeanGenerico;
import aqu.persistencia.Dao.Contabilidad.*;
import aqu.persistencia.Dao.CuentasPorPagar.CxpImpuestoManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpRetencionManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpTipoContribuyenteManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpTipoContribuyenteRetencionManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpTipoRetencionManager;
import aqu.persistencia.entity.*;
import aqu.persistencia.utilidad.MessagesController;
import com.icesoft.faces.component.ext.RowSelectorEvent;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

/**
 *
 * @author AQU
 */
@ManagedBean(name = "retencionTransController")
@ViewScoped
public class RetencionTransController extends BeanGenerico {

    private CxpTipoRetencion tiporetencion;
    private CxpRetencion retencion;
    private CxpTipoContribuyenteRetencion tipocontribuyenteretencion;
    private CxpTipoContribuyente tipocontribuyenteGroup;
    private ConCuenta cuentaGroup;
    private CxpImpuesto impuestoGroup;
    private List<CxpTipoRetencion> listaTipoRetencion;
    private List<CxpRetencion> listaRetencion;   
    private List<CxpTipoContribuyenteRetencion> listaTipoContribuyenteRetencion;
    private List<CxpTipoContribuyente> listaTipoContribuyente;
    private List<ConCuenta> listaCuenta;
    private List<CxpImpuesto> listaImpuesto;
    private CxpTipoRetencionManager cxpTipoRetencionManager = new CxpTipoRetencionManager();
    private CxpRetencionManager cxpRetencionManager = new CxpRetencionManager();
    private CxpTipoContribuyenteRetencionManager cxpTipoContribuyenteRetencionManager = new CxpTipoContribuyenteRetencionManager();
    private CxpTipoContribuyenteManager cxpTipoContribuyenteManager = new CxpTipoContribuyenteManager();
    private ConCuentaManager conCuentaManager = new ConCuentaManager();
    private CxpImpuestoManager cxpImpuestoManager = new CxpImpuestoManager();
    private boolean panelvisible;
    
    

    public void switchRetencion(CxpRetencion retencion) {
        tiporetencion = retencion.getCxpCodigoTipRet();

    }

    public void switchTipoContribuyenteRetencion(CxpTipoContribuyenteRetencion tipoContribuyenteRetencion) {

        tipocontribuyenteGroup = tipoContribuyenteRetencion.getCxpCodigoTipCon();
        retencion = tipoContribuyenteRetencion.getCxpCodigoRet();
        cuentaGroup = tipoContribuyenteRetencion.getConCodigoCue();
        impuestoGroup = tipoContribuyenteRetencion.getCxpCodigoImp();

    }

    public ConCuenta getCuentaGroup() {
        return cuentaGroup;
    }

    public void setCuentaGroup(ConCuenta cuentaGroup) {
        this.cuentaGroup = cuentaGroup;
    }

    public CxpImpuesto getImpuestoGroup() {
        return impuestoGroup;
    }

    public void setImpuestoGroup(CxpImpuesto impuestoGroup) {
        this.impuestoGroup = impuestoGroup;
    }

    public CxpRetencion getRetencion() {
        return retencion;
    }

    public void setRetencion(CxpRetencion retencion) {
        this.retencion = retencion;
    }

    public CxpTipoContribuyente getTipocontribuyenteGroup() {
        return tipocontribuyenteGroup;
    }

    public void setTipocontribuyenteGroup(CxpTipoContribuyente tipocontribuyenteGroup) {
        this.tipocontribuyenteGroup = tipocontribuyenteGroup;
    }

    public CxpTipoRetencion getTiporetencion() {
        return tiporetencion;
    }

    public void setTiporetencion(CxpTipoRetencion tiporetencion) {
        this.tiporetencion = tiporetencion;
    }

    public CxpTipoContribuyenteRetencion getTipocontribuyenteretencion() {
        return tipocontribuyenteretencion;
    }

    public void setTipocontribuyenteretencion(CxpTipoContribuyenteRetencion tipocontribuyenteretencion) {
        this.tipocontribuyenteretencion = tipocontribuyenteretencion;
    }

    public ConCuentaManager getConCuentaManager() {
        return conCuentaManager;
    }

    public void setConCuentaManager(ConCuentaManager conCuentaManager) {
        this.conCuentaManager = conCuentaManager;
    }

    public CxpImpuestoManager getCxpImpuestoManager() {
        return cxpImpuestoManager;
    }

    public void setCxpImpuestoManager(CxpImpuestoManager cxpImpuestoManager) {
        this.cxpImpuestoManager = cxpImpuestoManager;
    }

    public CxpRetencionManager getCxpRetencionManager() {
        return cxpRetencionManager;
    }

    public void setCxpRetencionManager(CxpRetencionManager cxpRetencionManager) {
        this.cxpRetencionManager = cxpRetencionManager;
    }

    public CxpTipoContribuyenteManager getCxpTipoContribuyenteManager() {
        return cxpTipoContribuyenteManager;
    }

    public void setCxpTipoContribuyenteManager(CxpTipoContribuyenteManager cxpTipoContribuyenteManager) {
        this.cxpTipoContribuyenteManager = cxpTipoContribuyenteManager;
    }

    public CxpTipoContribuyenteRetencionManager getCxpTipoContribuyenteRetencionManager() {
        return cxpTipoContribuyenteRetencionManager;
    }

    public void setCxpTipoContribuyenteRetencionManager(CxpTipoContribuyenteRetencionManager cxpTipoContribuyenteRetencionManager) {
        this.cxpTipoContribuyenteRetencionManager = cxpTipoContribuyenteRetencionManager;
    }

    public CxpTipoRetencionManager getCxpTipoRetencionManager() {
        return cxpTipoRetencionManager;
    }

    public void setCxpTipoRetencionManager(CxpTipoRetencionManager cxpTipoRetencionManager) {
        this.cxpTipoRetencionManager = cxpTipoRetencionManager;
    }

    public List<ConCuenta> getListaCuenta() {      
        return listaCuenta;
    }

    public void setListaCuenta(List<ConCuenta> listaCuenta) {
        this.listaCuenta = listaCuenta;
    }

    public List<CxpImpuesto> getListaImpuesto() {
      
        return listaImpuesto;
    }

    public void setListaImpuesto(List<CxpImpuesto> listaImpuesto) {
        this.listaImpuesto = listaImpuesto;
    }

    
    public List<CxpTipoContribuyente> getListaTipoContribuyente() {
      
        return listaTipoContribuyente;
    }

    public void setListaTipoContribuyente(List<CxpTipoContribuyente> listaTipoContribuyente) {
        this.listaTipoContribuyente = listaTipoContribuyente;
    }

    public List<CxpTipoContribuyenteRetencion> getListaTipoContribuyenteRetencion() {
       
        return listaTipoContribuyenteRetencion;
    }

    public void setListaTipoContribuyenteRetencion(List<CxpTipoContribuyenteRetencion> listaTipoContribuyenteRetencion) {
        this.listaTipoContribuyenteRetencion = listaTipoContribuyenteRetencion;
    }


   
    public RetencionTransController() throws ParseException {

 
        tiporetencion = new CxpTipoRetencion();
        retencion = new CxpRetencion();
        tipocontribuyenteretencion = new CxpTipoContribuyenteRetencion();
        tipocontribuyenteGroup = new CxpTipoContribuyente();
        cuentaGroup = new ConCuenta();
        impuestoGroup = new CxpImpuesto();
        listaTipoRetencion = cxpTipoRetencionManager.getList();
         


        
    }

    public boolean isPanelvisible() {
        return panelvisible;
    }

    public void setPanelvisible(boolean panelvisible) {
        this.panelvisible = panelvisible;
    }

    public void llamarPanelvisible(ActionEvent event) {
        panelvisible = !panelvisible;
    }

    public List<CxpTipoRetencion> getListaTipoRetencion() {
        listaTipoRetencion = cxpTipoRetencionManager.getList();
        return listaTipoRetencion;
    }

    public void setListaTipoRetencion(List<CxpTipoRetencion> listaTipoRetencion) {
        this.listaTipoRetencion = listaTipoRetencion;
    }

    public List<CxpRetencion> getListaRetencion() {
        
        return listaRetencion;
    }

    public void setListaRetencion(List<CxpRetencion> listaRetencion) {
        this.listaRetencion = listaRetencion;
    }

    public void nuevoTipoRetencion(ActionEvent actionEvent) {
        tiporetencion = new CxpTipoRetencion();

    }

    public String eliminarTipoRetencion() {
        try {

            CxpTipoRetencion tipoRetencionTemp = (CxpTipoRetencion) (tiporetencion);


            if (cxpTipoRetencionManager.delete(tipoRetencionTemp) == false) {
                llamarPanelvisible(null);

            }
            tiporetencion = new CxpTipoRetencion();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }

        return "index";

    }

   
            
    
    public void insertarTipoRetencion(ActionEvent actionEvent) {
        try {
            tiporetencion.setCxpCodigoTipRet(MessagesController.obtenerkeyautomaticosinceros("cxp_tiporetencion", "CXP_CODIGO_TIPRET"));

            if (cxpTipoRetencionManager.create(tiporetencion) == false) {
                llamarPanelvisible(null);
                
            }
            tiporetencion = new CxpTipoRetencion();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }

    }

    public void modificarTipoRetencion(ActionEvent actionEvent) {
        try {

            if (cxpTipoRetencionManager.update(tiporetencion) == false) {
                llamarPanelvisible(null);

            }
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }


    }

    public void nuevoRetencion(ActionEvent actionEvent) {
        retencion = new CxpRetencion();
        tiporetencion = new CxpTipoRetencion();
    }

    public String eliminarRetencion() {
        try {
            CxpRetencion retencionTemp = (CxpRetencion) (retencion);


            if (cxpRetencionManager.delete(retencionTemp) == false) {
                llamarPanelvisible(null);
            }
            
            listaRetencion=cxpRetencionManager.buscarporTipoRetencion(tiporetencion);
            retencion = new CxpRetencion();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }

        return "index";
    }

    public void insertarRetencion(ActionEvent actionEvent) {
        
        try {
          
           retencion.setCxpCodigoTipRet(tiporetencion);
 

            if (cxpRetencionManager.create(retencion) == false) {
                llamarPanelvisible(null);
            }
            listaRetencion=cxpRetencionManager.buscarporTipoRetencion(tiporetencion);
            
            retencion = new CxpRetencion();
            
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }

    }

    public void modificarRetencion(ActionEvent actionEvent) {
        try {
            
            retencion.setCxpCodigoTipRet(tiporetencion);
            

            if (cxpRetencionManager.update(retencion) == false) {
                llamarPanelvisible(null);
            }

        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
        
        
       
    }

    public void nuevoTipoContribuyenteRetencion(ActionEvent actionEvent) {
        tipocontribuyenteretencion = new CxpTipoContribuyenteRetencion();
        retencion = new CxpRetencion();
        tipocontribuyenteGroup = new CxpTipoContribuyente();
        cuentaGroup = new ConCuenta();
        impuestoGroup = new CxpImpuesto();
    }

    public String eliminarTipoContribuyenteRetencion() {
        try {

            CxpTipoContribuyenteRetencion tipocontribuyenteretencionTemp = (CxpTipoContribuyenteRetencion) (tipocontribuyenteretencion);


            if (cxpTipoRetencionManager.delete(tipocontribuyenteretencionTemp) == false) {
                llamarPanelvisible(null);
            }
            listaTipoContribuyenteRetencion=cxpTipoContribuyenteRetencionManager.buscarporRetencion(retencion);
            tipocontribuyenteretencion=new CxpTipoContribuyenteRetencion();
            
            
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }

        return "index";
        
            
    }

    public void insertarTipoContribuyenteRetencion(ActionEvent actionEvent) {
        try {
            tipocontribuyenteretencion.setCxpCodigoTipConRet(MessagesController.obtenerkeyautomaticosinceros("cxp_tipoContribuyenteRetencion", "CXP_CODIGO_TIPCONRET"));
            tipocontribuyenteretencion.setCxpCodigoTipCon((CxpTipoContribuyente) cxpTipoContribuyenteManager.getElementById(tipocontribuyenteGroup.getCxpCodigoTipCon()));                       tipocontribuyenteretencion.setConCodigoCue((ConCuenta) conCuentaManager.getElementById(cuentaGroup.getConCodigoCue()));
            tipocontribuyenteretencion.setCxpCodigoImp((CxpImpuesto) cxpImpuestoManager.getElementById(impuestoGroup.getCxpCodigoImp()));
            tipocontribuyenteretencion.setCxpCodigoRet(retencion);

            if (cxpTipoContribuyenteRetencionManager.create(tipocontribuyenteretencion) == false) {
                llamarPanelvisible(null);              
            }
            listaTipoContribuyenteRetencion=cxpTipoContribuyenteRetencionManager.buscarporRetencion(retencion);
            tipocontribuyenteretencion = new CxpTipoContribuyenteRetencion();

            
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
        
        
    }

    public void modificarTipoContribuyenteRetencion(ActionEvent actionEvent) {
        try {
            tipocontribuyenteretencion.setCxpCodigoTipCon((CxpTipoContribuyente) cxpTipoContribuyenteManager.getElementById(tipocontribuyenteGroup.getCxpCodigoTipCon()));
            tipocontribuyenteretencion.setConCodigoCue((ConCuenta) conCuentaManager.getElementById(cuentaGroup.getConCodigoCue()));
            tipocontribuyenteretencion.setCxpCodigoImp((CxpImpuesto) cxpImpuestoManager.getElementById(impuestoGroup.getCxpCodigoImp()));
            tipocontribuyenteretencion.setCxpCodigoRet(retencion);

            if (cxpTipoContribuyenteRetencionManager.update(tipocontribuyenteretencion) == false) {
                llamarPanelvisible(null);
            }



        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }


    }

    public void rowSelectionListenerTipoRetencion(RowSelectorEvent event) {
        
        tiporetencion = listaTipoRetencion.get(event.getRow());
        listaRetencion= cxpRetencionManager.buscarporTipoRetencion(tiporetencion);
        

    }

    public void rowSelectionListenerRetencion(RowSelectorEvent event) {
       
        retencion = listaRetencion.get(event.getRow());   
        
        listaTipoContribuyenteRetencion = cxpTipoContribuyenteRetencionManager.buscarporRetencion(retencion);
        switchRetencion(retencion);

    }

    public void rowSelectionListenerTipoContribuyenteRetencion(RowSelectorEvent event) {
       
        tipocontribuyenteretencion = listaTipoContribuyenteRetencion.get(event.getRow());
        switchTipoContribuyenteRetencion(tipocontribuyenteretencion);
        
        listaTipoContribuyente = cxpTipoContribuyenteManager.getList();
        listaCuenta = conCuentaManager.getListOrdenado("conCodigoCue");
        listaImpuesto = cxpImpuestoManager.getList();

    }   
    
}
